package cn.slipi.admin.service;

import cn.slipi.admin.common.dto.PageDTO;
import cn.slipi.admin.entity.TSysMenu;
import cn.slipi.admin.entity.TSysPermission;
import cn.slipi.admin.entity.TSysPermissionModule;
import cn.slipi.admin.entity.TSysRole;
import cn.slipi.admin.service.dto.in.m.*;
import cn.slipi.admin.service.dto.out.PermissionDTO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * 系统权限表 服务类
 * </p>
 *
 * @author lee
 * @since 2020-10-09
 */
public interface TSysPermissionService extends IService<TSysPermission> {
    /**
     * 保存角色拥有权限
     *
     * @param rid
     * @param permissionIds
     * @return
     */
    Boolean saveRolePermission(Integer rid, List<Integer> permissionIds);

    /**
     * 修改角色
     *
     * @param rid
     * @param roleSaveDTO
     * @return
     */
    Boolean updateRole(Integer rid, RoleSaveDTO roleSaveDTO);

    /**
     * 添加角色
     *
     * @param roleSaveDTO
     * @return
     */
    Integer addRole(RoleSaveDTO roleSaveDTO);

    /**
     * 批量修改权限所属模块
     *
     * @param pid
     * @param mid
     * @return
     */
    Boolean updatePermissionModule(String pid, Integer mid);

    /**
     * 修改权限
     *
     * @param pid
     * @param permissionSaveDTO
     * @return
     */
    Boolean updatePermission(Integer pid, PermissionSaveDTO permissionSaveDTO);

    /**
     * 添加权限
     *
     * @param permissionSaveDTO
     * @return
     */
    Integer addPermission(PermissionSaveDTO permissionSaveDTO);

    /**
     * 获取角色列表
     *
     * @param roleQueryDTO
     * @return
     */
    IPage<TSysRole> getRoleList(RoleQueryDTO roleQueryDTO);

    /**
     * 保存模块
     *
     * @param moduleSaveDTO
     * @return
     */
    Integer addModule(ModuleSaveDTO moduleSaveDTO);

    /**
     * 更新模块
     *
     * @param mid
     * @param moduleSaveDTO
     * @return
     */
    Boolean updateModule(Integer mid, ModuleSaveDTO moduleSaveDTO);

    /**
     * 删除模块
     *
     * @param mid
     * @return
     */
    Boolean deleteModule(Integer mid);

    /**
     * 根据用户id获取菜单
     *
     * @param userId
     * @return
     */
    List<TSysMenu> getMenuByAdminId(Integer userId);

    /**
     * 根据角色ids获取菜单
     *
     * @param roleIds
     * @return
     */
    List<TSysMenu> getMenuByRoleIds(List<Integer> roleIds);

    /**
     * 根据用户id获取权限列表
     *
     * @param userId
     * @return
     */
    List<PermissionDTO> getPermissionByAdminId(Integer userId);

    /**
     * 根据用户id获取角色列表
     *
     * @param userId
     * @return
     */
    List<TSysRole> getRoleByAdminId(Integer userId);

    /**
     * 根据角色列表获取权限
     *
     * @param roleIds
     * @return
     */
    List<PermissionDTO> getPermissionByRoleIds(List<Integer> roleIds);

    /**
     * 根据ids获取权限
     *
     * @param permissionIds
     * @return
     */
    List<TSysPermission> getPermissionByPermissionIds(List<Integer> permissionIds);


    /**
     * 获取权限模块下拉列表
     *
     * @return
     */
    List<TSysPermissionModule> getPermissionModuleDropList();

    /**
     * 获取所有权限
     *
     * @return
     */
    List<PermissionDTO> getPermissionAll();

    /**
     * 根据角色Id获取权限
     *
     * @param roleId
     * @return
     */
    List<PermissionDTO> getPermissionByRoleId(Integer roleId);

    /**
     * 获取权限列表
     *
     * @param permissionQueryDTO
     * @return
     */
    PageDTO<PermissionDTO> getPermissionList(PermissionQueryDTO permissionQueryDTO);


    /**
     * 获取权限模块列表
     *
     * @param moduleQueryDTO
     * @return
     */
    IPage<TSysPermissionModule> getPermissionModuleList(ModuleQueryDTO moduleQueryDTO);

    TSysPermission getPermissionByCode(String code);
}
